// package main

// import "fmt"

// map类型  定义的语法: map[keyType]ValueType KeyType: 表示键的类型; ValueType: 表示键对应的值的类型
// 光声明map类型  但是没有初始化  值就是nil(空值)
//go语言中提供的映射关系容器为map，其内部使用散列表实现
//是一种无序的基于key-value的数据结构,go语言中的map是引用类型,必须初始化才能引用

// func main() {
// 	var m1 map[string]int
// 	fmt.Println(m1==nil) //还没有初始化(没有在内存中开辟内存空间)
// 	m1=make(map[string]int,10)//初始化；要估算好该map容量，避免在程序运行期间在动态扩容
// 	m1["理想"] = 1
// 	m1["现实"] = 2
// 	fmt.Println(m1["理想"]) //如果不存在这个key值，会拿到对应值类型的零值
// 	//判断键值存不存在  约定成俗用ok接收返回的布尔值
// 	value, ok:=m1["理想"]
// 	if !ok {
// 		fmt.Println("查无此key")
// 	}else{
// 		fmt.Println(value)
// 	}
// 	//map的遍历（遍历出key和value）
// 	for k,v:=range m1{
// 		fmt.Println(k,v)
// 	}
// 	//只遍历出key
// 	for k := range m1{
// 		fmt.Println(k)
// 	}
// 	//只遍历value
// 	for _, v:=range m1{
// 		fmt.Println(v)
// 	}
// 	//删除
// 	delete(m1,"理想")
// 	fmt.Println(m1)

// }
package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	// a:=12
	// {
	// 	a:=13
	// 	_=a
	// }
	// fmt.Println(a)
	//例子：按照指定顺序遍历map
	rand.Seed(time.Now().UnixNano())         //初始化随机数种子
	var scoreMap = make(map[string]int, 200) //对map进行切片初始化
	for i := 0; i < 100; i++ {
		key := fmt.Sprintf("stu%02d", i) //生产stu开头的字符串
		value := rand.Intn(100)          //生成0~99的随机整数
		scoreMap[key] = value
		fmt.Println(scoreMap)
	}
	// 取出map中的所有key存入切片keys中
	var keys = make([]string, 0, 200)
	for key := range scoreMap {
		keys = append(keys, key)
		fmt.Println(keys)
	}
	// 对切片keys进行排序
	//sort.Ints(keys)
	//fmt.Println(keys)
	//sort.Strings(keys)
	//	fmt.Println(keys)
	// 按照排序后的key遍历map
	for _, key := range keys {
		fmt.Println(key, scoreMap[key])
	}
}
